[IA64] Fix xm dump-core with vti domain
authorAlex Williamson <alex.williamson@hp.com>
Thu, 5 Apr 2007 15:18:49 +0000 (09:18 -0600)
committerAlex Williamson <alex.williamson@hp.com>
Thu, 5 Apr 2007 15:18:49 +0000 (09:18 -0600)
Share privregs with domain and assign it to pseudo physical
address space as para virtualized domain.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
tools/libxc/xc_core_ia64.c
xen/arch/ia64/vmx/vmx_init.c
xen/arch/ia64/xen/domain.c
xen/include/asm-ia64/domain.h

index dff561b3d469a4c3b2b2c0bab60b7f4c23e7ac2b..27874dc9858ff29acd42f3866e92ce8a0a8e1b33 100644 (file)
@@ -93,6 +93,7 @@ memory_map_get_old_hvm(int xc_handle, xc_dominfo_t *info,
         {IO_PAGE_START, IO_PAGE_SIZE},
         {STORE_PAGE_START, STORE_PAGE_SIZE},
         {BUFFER_IO_PAGE_START, BUFFER_IO_PAGE_SIZE},
+        {BUFFER_PIO_PAGE_START, BUFFER_PIO_PAGE_SIZE},
         {GFW_START, GFW_SIZE},
     };
     const unsigned int nr_gfw_map = sizeof(gfw_map)/sizeof(gfw_map[0]);
index 65c62f6454c316a9cab10ef08f6a03a6e3f2c615..01c0e4a8a449244ee740c78d7d9e3c1ed7d0a98f 100644 (file)
@@ -301,6 +301,7 @@ vmx_final_setup_guest(struct vcpu *v)
        ASSERT(vpd);
 
        v->arch.privregs = (mapped_regs_t *)vpd;
+       vcpu_share_privregs_with_guest(v);
        vpd->vpd_low.virt_env_vaddr = vm_buffer;
 
        /* Per-domain vTLB and vhpt implementation. Now vmx domain will stick
index cbb5a2800b90cd5dc514acb24b3e2b30c58fb5ec..7804765315716a2ca7c0776aa1b09e0081ee1633 100644 (file)
@@ -446,22 +446,11 @@ int vcpu_initialise(struct vcpu *v)
        return 0;
 }
 
-int vcpu_late_initialise(struct vcpu *v)
+void vcpu_share_privregs_with_guest(struct vcpu *v)
 {
        struct domain *d = v->domain;
-       int rc, order, i;
-
-       if (HAS_PERVCPU_VHPT(d)) {
-               rc = pervcpu_vhpt_alloc(v);
-               if (rc != 0)
-                       return rc;
-       }
+       int i, order = get_order_from_shift(XMAPPEDREGS_SHIFT); 
 
-       /* Create privregs page. */
-       order = get_order_from_shift(XMAPPEDREGS_SHIFT);
-       v->arch.privregs = alloc_xenheap_pages(order);
-       BUG_ON(v->arch.privregs == NULL);
-       memset(v->arch.privregs, 0, 1 << XMAPPEDREGS_SHIFT);
        for (i = 0; i < (1 << order); i++)
                share_xen_page_with_guest(virt_to_page(v->arch.privregs) + i,
                                          d, XENSHARE_writable);
@@ -474,6 +463,25 @@ int vcpu_late_initialise(struct vcpu *v)
        for (i = 0; i < XMAPPEDREGS_SIZE; i += PAGE_SIZE)
                assign_domain_page(d, IA64_XMAPPEDREGS_PADDR(v->vcpu_id) + i,
                                   virt_to_maddr(v->arch.privregs + i));
+}
+
+int vcpu_late_initialise(struct vcpu *v)
+{
+       struct domain *d = v->domain;
+       int rc, order;
+
+       if (HAS_PERVCPU_VHPT(d)) {
+               rc = pervcpu_vhpt_alloc(v);
+               if (rc != 0)
+                       return rc;
+       }
+
+       /* Create privregs page. */
+       order = get_order_from_shift(XMAPPEDREGS_SHIFT);
+       v->arch.privregs = alloc_xenheap_pages(order);
+       BUG_ON(v->arch.privregs == NULL);
+       memset(v->arch.privregs, 0, 1 << XMAPPEDREGS_SHIFT);
+       vcpu_share_privregs_with_guest(v);
 
        return 0;
 }
index d15265d7d93beeb225015c52e4cdbc9d6a33d5d4..80af70cde58b46d88604a0a410b981d345d313c9 100644 (file)
@@ -21,6 +21,7 @@ struct tlb_track;
 extern void domain_relinquish_resources(struct domain *);
 struct vcpu;
 extern void relinquish_vcpu_resources(struct vcpu *v);
+extern void vcpu_share_privregs_with_guest(struct vcpu *v);
 extern int vcpu_late_initialise(struct vcpu *v);
 
 /* given a current domain metaphysical address, return the physical address */